package com.xindaoapp.happypet.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.ListView;

public class InterceptListView extends ListView {

    private float mMostRecentX; // 最后一次的x轴偏移量
    private float mMostRecentY; // 最后一次的y轴偏移量
    private final int scaledTouchSlop;

    public InterceptListView(Context context) {
        super(context);
        scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    public InterceptListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    public InterceptListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        scaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mMostRecentX = (int) ev.getX();
                break;
            case MotionEvent.ACTION_MOVE:
                // int moveX = (int) ev.getX();
                //
                // int diffX = Math.abs(moveX - mMostRecentX);
                //
                // if (diffX > scaledTouchSlop) {
                // return true;
                // }
                break;
            default:
                break;
        }

        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final float x = (int) event.getX();
        final float y = (int) event.getY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mMostRecentX = x;
                mMostRecentY = y;
                break;
            case MotionEvent.ACTION_MOVE:
                //
                // int moveX = (int) event.getX(); // 当前按下的x轴偏移量
                // int moveY = (int) event.getY(); // 当前按下的y轴偏移量
                //
                // // 第一步:最后一次的x轴偏移量 - 当前按下的x轴偏移量 = 增量值
                // int deltaX = mMostRecentX - moveX;
                // int deltaY = mMostRecentY - moveY;
                //
                // // 第二步: 把最新的x轴偏移量赋值给成员变量
                // mMostRecentX = moveX;
                // mMostRecentY = moveY;
                if (Math.abs(x - mMostRecentX) > Math.abs(y - mMostRecentY)) {
                    getParent().requestDisallowInterceptTouchEvent(false);
                } else {
                    getParent().requestDisallowInterceptTouchEvent(true);
                }
                // if(getScrollX() + deltaX > 0) {
                // scrollTo(0, 0);
                // } else if(getScrollX() + deltaX < -getChildAt(0).getWidth()) {
                // scrollTo(-getChildAt(0).getWidth(), 0);
                // } else {
                // // 第三步: 调用scrollBy(增量值, 0);
                // scrollBy(deltaX, 0);
                // }
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                getParent().requestDisallowInterceptTouchEvent(false);
                break;
        }
        return super.onTouchEvent(event);
    }

}
